package com.jiangjiang.eshop.commodity.state;

import com.jiangjiang.eshop.commodity.dto.GoodsDTO;

public interface GoodsStateManager {

    /**
     * 创建一个商品
     * @param goodsDTO
     */
    void create(GoodsDTO goodsDTO);

    /**
     * 判断这个商品能否编辑
     * @param goodsDTO 商品数据
     * @return 判断结果
     */
    Boolean canEdit(GoodsDTO goodsDTO);

    /**
     * 编辑商品
     * @param goodsDTO
     */
    void edit(GoodsDTO goodsDTO);

    /**
     * 判断能否执行审核操作
     * @param goodsDTO
     * @return
     */
    Boolean canApprove(GoodsDTO goodsDTO);

    /**
     * 执行审核操作
     * @param goods
     * @param approveResult
     * @throws Exception
     */
    void approve(GoodsDTO goods, Integer approveResult) throws Exception;

    /**
     * 判断能否执行上架操作
     * @param goodsDTO  商品
     * @return 判断结果
     */
    Boolean canPutOnShelves(GoodsDTO goodsDTO);

    /**
     * 执行上架操作
     * @param goodsDTO 商品
     */
    void putOnShelves(GoodsDTO goodsDTO);

    /**
     * 判断能否执行下架操作
     * @param goodsDTO 商品
     * @return 判断结果
     */
    Boolean canPullOffShelves(GoodsDTO goodsDTO);

    /**
     * 执行下架操作
     * @param goodsDTO 商品
     */
    void pullOffShelves(GoodsDTO goodsDTO);

    /**
     * 能否执行删除操作
     * @param goodsDTO
     * @return 判断结果
     */
    Boolean canRemove(GoodsDTO goodsDTO);


}
